首页 > 编程笔记

C#类属性用法汇总

属性是对实体特征的抽象,用于提供对类或对象的访问。

类的属性描述的是状态信息,在类的实例中,属性的值表示对象的状态值。

C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特性与一些操作关联起来。

C# 类属性的声明语法格式如下:
【访问修饰符】【类型】【属性名】
{
    get  {get访问器体}
    set  {set访问器体}
}

重点介绍一下 get 访问器和 set 访问器。

get 访问器相当于一个具有属性类型返回值的无参数方法,它除了作为赋值的目标外,当在表达式中引用属性时,将调用该属性的 get 访问器获取属性的值。

get 访问器体需要用 return 语句来返回,并且所有的 return 语句都必须返回一个可隐式转换为属性类型的表达式。

set访问器相当于一个具有单个属性类型值参数和 void 返回类型的方法。set 访问器的隐式参数始终命名为 value;当一个属性作为赋值的目标被引用时,就会调用 set 访问器,所传递的参数将提供新值。

由于 set 访问器存在隐式的参数 value,因此在 set 访问器中不能自定义名称为 value 的局部变量或常量。

根据是否存在get和set访问器,属性可以分为以下几种:

提示:属性的主要用途是限制外部类对类中成员的访问权限,定义在类级别上。


例如,在飞机类中定义两个代表飞机坐标的属性 X 和 Y,设置这两个属性都是可读可写属性,并且坐标的值必须大于 0,代码如下:
public int X
{
    get { return x; }
    set
    {
        if (x > 0)
            x = value;
    }
}
public int Y
{
    get { return y; }
    set
    {
        if (y > 0)
            y = value;
    }
}
由于属性的 set 访问器中可以包含大量的语句,因此可以对赋予的值进行检查,如果值不安全或者不符合要求,就可以进行处理操作。这样可以避免因为给属性设置了错误的值而导致的异常。

【实例】创建一个控制台应用程序,在默认的 Program 类中定义一个 Age 属性,设置访问级别为 public,因为该属性提供了 get 和 set 访问器,所以它是可读可写属性;然后在该属性的 set 访问器中对属性的值进行控制,控制只能输入 1~130 内的数据,如果输入其他数据,会提示相应的信息。
class Program
{
    private int age;  //定义字段
    public int Age    //定义属性
    {
        get//设置get访问器
        {
            return age;
        }
        set//设置set访问器
        {
            if (value > 0 && value < 130)//如果数据合理,将值赋给字段
            {
                age = value;
            }
            else
            {
                Console.WriteLine("输入数据不合理!");
            }
        }
    }
    static void Main(string[] args)
    {
        Program p = new Program();//创建Program类的对象
        while (true)
        {
            Console.Write("请输入年龄:");
            p.Age = Convert.ToInt16(Console.ReadLine());
        }
    }
}
程序运行结果为:

请输入年龄:30
请输入年龄:140
输入数据不合理!
请输入年龄:-10
输入数据不合理!
请输入年龄:


C# 支持自动实现的属性,即在属性的 get 和 set 访问器中没有任何逻辑,代码如下:
public int Age
{
    get;
    set;
}
使用自动实现的属性,就不能在属性设置中进行属性的有效验证。

例如在上面的例子中,不能检查输入的年龄是否在 0~130 内;另外,如果要使用自动实现的属性,则必须同时拥有 get 访问器和 set 访问器,只有 get 访问器或者只有 set 访问器的代码会出现错误。

例如,下面的代码是不合法的:
public int Age
{
     get;
}

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。